package org.dromara.common.mybatis.enums

import org.dromara.common.core.utils.StringUtils

/**
 * 数据库类型
 *
 * @author Lion Li
 * @updater LikeYouDo
 * @date 2025/1/26 21:54
 */
enum class DataBaseType(
    /**
     * 数据库类型
     */
    val type: String
) {
    /**
     * MySQL
     */
    MY_SQL("MySQL"),

    /**
     * Oracle
     */
    ORACLE("Oracle"),

    /**
     * PostgreSQL
     */
    POSTGRE_SQL("PostgreSQL"),

    /**
     * SQL Server
     */
    SQL_SERVER("Microsoft SQL Server");

    companion object {
        /**
         * 根据数据库产品名称查找对应的数据库类型
         *
         * @param databaseProductName 数据库产品名称
         * @return 对应的数据库类型枚举值
         */
        @JvmStatic
        fun find(databaseProductName: String): DataBaseType? {
            if (StringUtils.isBlank(databaseProductName)) {
                return MY_SQL
            }
            for (item in entries) {
                if (item.type == databaseProductName) {
                    return item
                }
            }
            return MY_SQL
        }
    }

    /**
     * 判断是否为 MySQL 类型
     */
    fun isMySql(): Boolean {
        return this == MY_SQL
    }

    /**
     * 判断是否为 Oracle 类型
     */
    fun isOracle(): Boolean {
        return this == ORACLE
    }

    /**
     * 判断是否为 PostgreSQL 类型
     */
    fun isPostgreSql(): Boolean {
        return this == POSTGRE_SQL
    }

    /**
     * 判断是否为 SQL Server 类型
     */
    fun isSqlServer(): Boolean {
        return this == SQL_SERVER
    }

}
